package com.xiaoq.matrix.weibo.util;

import java.io.IOException;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import com.fasterxml.jackson.databind.ObjectMapper;

import com.xiaoq.web.DefaultMapper;
import weibo4j.util.WeiboConfig;

public class WeiBoUtil {
	
	  /** 
     * 模拟请求 
     *  
     * @param url       资源地址 
     * @param map   参数列表 
     * @param encoding  编码 
     * @return 
     * @throws ParseException 
     * @throws IOException 
     */  
    public static ArticleStatus send(String url, Map<String,String> map,String encoding) throws ParseException, IOException{  
        String body = "";  
  
        //创建httpclient对象  
        CloseableHttpClient client = HttpClients.createDefault();  
        //创建post方式请求对象  
        HttpPost httpPost = new HttpPost(url);  
          
        //装填参数  
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();  
        if(map!=null){  
            for (Entry<String, String> entry : map.entrySet()) {  
                nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));  
            }  
        }  
        //设置参数到请求对象中  
        httpPost.setEntity(new UrlEncodedFormEntity(nvps, encoding));  
  
        System.out.println("请求地址："+url);  
        System.out.println("请求参数："+nvps.toString());  
          
        //设置header信息  
        //指定报文头【Content-type】、【User-Agent】  
        httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");  
        httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
          
        //执行请求操作，并拿到结果（同步阻塞）  
        CloseableHttpResponse response = client.execute(httpPost);  
        //获取结果实体  
        HttpEntity entity = response.getEntity(); 
        ArticleStatus articleStatus = null;
        if (entity != null) {  
            //按指定编码转换结果实体为String类型  
            body = EntityUtils.toString(entity, encoding); 
            System.out.println(body);
            ObjectMapper objectMapper = new DefaultMapper();
            articleStatus = objectMapper.readValue(body, ArticleStatus.class);
           
        }  
        EntityUtils.consume(entity);  
        //释放链接  
        response.close();  
        return articleStatus;  
    }
    
    /**
     * map 是参数集合 返回的是一个
     * 返回的body是一个String类型的json http返回结果
     * @param map
     * @return
     * @throws ParseException
     * @throws IOException
     */
    public static ArticleStatus updateStatus(Map<String, String> map){
    	String articleURL = WeiboConfig.getValue("articleURL");
    	ArticleStatus articleStatus =null;
		try {
			articleStatus = send(articleURL, map,"utf-8");
			
			 return articleStatus;
		} catch (ParseException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		 return articleStatus;
    	
    }

}
